cmake中使用find 您所在的位置:网站首页 cmake find package 路径 cmake中使用find

cmake中使用find

2023-06-18 08:20| 来源: 网络整理| 查看: 265

如果依赖的库在非系统库中,默认情况下,cmake是找不到的,或者找到的是系统库下不想要的,比如使用交叉编译工具编译的某些开源库,安装在某个单独目录中,此时默认cmake查找的话,是找不到自己编译的库的。此时,需要设置两个环境变量,指定搜索位置:

CMAKE_PREFIX_PATH:可以用于find_package,find_library和find_path。路径设置可以包含最终lib所在目录(即类似于/opt/abc/lib/这样的目录),也可以是lib所在目录的上一层目录(即类似于/opt/abc/这样的目录,此时abc目录下必须有lib名称的目录才行。另外,如果库是在abc目录下的一个非lib目录下,比如/opt/abc/x64/,则这样不行,只能全路径才行);CMAKE_MODULE_PATH:用于find_package中为MODULE的情况;CMAKE_FIND_ROOT_PATH:可以用于find_package,find_library和find_path。且只能是lib目录上层的目录(即如果库在/opt/abc/lib/下面,则传入的路径只能是/opt/abc/,千万不能包含lib。如果库不在lib目录下,则此变量找不到对应的库)。

如果直接通过set设置,则默认位置会被清空,只会搜索设置的位置:

set(CMAKE_PREFIX_PATH /opt/abc/lib)

如果只是想将单独目录加到可搜索路径中,则用list:

list(APPEND CMAKE_PREFIX_PATH /opt/def/lib)

特别地,对应交叉编译环境来说,一般通常会设置CMAKE_FIND_ROOT_PATH_MODE_LIBRARY为ONLY:

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

此时由于设置了CMAKE_FIND_ROOT_PATH_MODE_LIBRARY为ONLY,则此后面使用find_library寻找第三方库的时候,不论是否传入了路径,也不论是否设置了CMAKE_PREFIX_PATH,都无法找到,因为此时find_library只会从CMAKE_FIND_ROOT_PATH设置的路径中寻找。此时如果想用find_library找到第三方库,要么将CMAKE_FIND_ROOT_PATH_MODE_LIBRARY 设置为NEVER,要么将第三方库路径添加到CMAKE_PREFIX_PATH中(推荐添加到CMAKE_PREFIX_PATH)。对于CMAKE_FIND_ROOT_PATH_MODE_INCLUDE 之于find_path,同样的道理。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有